//*************************************************************************//
//*           _____   ____________            ______               __     *//
//*          / /__ \ / ____/ ____/           / ____/___  _________/ /     *//
//*     __  / /__/ // __/ / __/    ______   / /_  / __ \/ ___/ __  /      *//
//*    / /_/ // __// /___/ /___   /_____/  / __/ / /_/ / /  / /_/ /       *//
//*    \____//____/_____/_____/           /_/    \____/_/   \__,_/        *//
//*                                                                       *//
//*     Copyright (c) 2006 Ford Argentina. All Rights Reserved.           *//
//*                                                                       *//
//*************************************************************************//

package ar.com.ford.it.webengine.helper;


import com.ford.it.logging.ILogger;
import com.ford.it.logging.Level;
import com.ford.it.logging.LogFactory;

/**
 * FordAppDateFactory <br>
 * 
 * Factory que permite obtener la fecha actual.<br>
 * Instancia objetos de tipo <code>FordAppDate</code> de acuerdo a como se configure
 * con el metodo init().<br>
 * Los objetos se obtienen invocando el metodo <code>getAppDate()</code>
 * 
 * 
 * @author aJi
 * 
 */
public final class FordAppDateFactory {

	private static final String CLASS_NAME = FordAppDateFactory.class.getName();
	private static final ILogger log = LogFactory.getInstance().getLogger(CLASS_NAME);

	/**
	 * Clase con la que se instanciaran los objetos
	 */
	private static String className;
	
	/**
	 * Constructor PRIVADO
	 */
	private FordAppDateFactory() {
	}

	/**
	 * Inicializar la factory especificando la clase de los objetos que se crearan;
	 * la misma debe extender <code>FordAppDate</code>
	 * 
	 * @param initClassName Clase que extienda a <code>FordAppDate</code>
	 */
    public static void init(String initClassName) {
        String METHOD_NAME = "init";
        
        log.entering(CLASS_NAME, METHOD_NAME, initClassName);
        
        if (className == null || className.equals("")) {
            className = initClassName;
        } 
        
        log.exiting(CLASS_NAME, METHOD_NAME);

    }
     
	/**
	 * Method getClassName.
	 * @return className
	 */
	public static String getClassName() {
		return className;
	}

    /**
     * Obtener la fecha actual
     */
    public static FordAppDate getAppDate() {
        String METHOD_NAME = "getAppDate";
        FordAppDate result = null;
        
        log.entering(CLASS_NAME, METHOD_NAME);
        
        try {
            result = (FordAppDate)Class.forName(className).newInstance();
        } catch (Exception excep) {
            log.logp(Level.SEVERE, CLASS_NAME, METHOD_NAME, "Exception: ", excep);
        }
        log.exiting(CLASS_NAME, METHOD_NAME);
		return result;
    }


}
